XSS как вектор атаки, даже если данные XSS не хранятся? - PullRequest
1 голос
/ 16 июня 2010

У меня вопрос по XSS

Можно ли использовать формы в качестве вектора для XSS, даже если данные не хранятся в базе данных и используются позднее?

, т. Е. В phpкод будет таким:

<form input="text" value="<?= @$_POST['my_field'] ?>" name='my_field'>

Отображение окна оповещения (продемонстрируйте, что JS может быть запущен) в вашем браузере тривиально с кодом выше.Но возможно ли это использовать в браузерах?Единственный сценарий, который я вижу, - это когда вы обманываете кого-то при посещении определенной страницы, то есть комбинации CSRF и XSS.

«Хранится в базе данных и используется позже»: сценарий, который я понимаю о CSSгде вы можете публиковать данные на сайте, который работает с JavaScript и отображается на странице в браузере, который имеет больше привилегий, чем ваши собственные.Но, чтобы быть ясно, это не Ват, о котором я говорю выше.

Ответы [ 4 ]

1 голос
/ 18 июня 2010

Да, это по-прежнему вектор атаки, хотя воздействие более ситуативно.

Вот надуманный сценарий, который расширяет предыдущие ответы, если форма требует проверки подлинности (и проще, если сайту все равно, если формы отправляются через POST или GET):

1) Атакующий использует CSRF для входа в систему жертвы с использованием учетных данных атакующего (например, ). Таким образом, злоумышленник передает форму жертве, и не имеет значения, если у жертвы нет учетной записи.
2) Злоумышленник использует другой CSRF для выполнения XSS для формы, которая запрашивает у жертвы некоторые учетные данные и т. Д. (Это - то, где должна произойти некоторая убедительная социальная инженерия, или у злоумышленника есть некоторый полезный JavaScript для использования в браузере Same Origin для сайт.)

Еще один надуманный сценарий, в котором уязвимая форма выполняет какое-то важное действие, например, перевод денег между счетами:

0) Уязвимая форма использует скрытые поля формы со случайными значениями для предотвращения CSRF. Злоумышленник не знает, что это за значения, и не может правильно настроить атаку.
1) Attacker создает полезную нагрузку CSRF, которая включает JavaScript для чтения случайных токенов csrf формы (т. Е. Извлекает их из DOM браузера).
2) Жертва заходит на сайт.
3) Злоумышленник заманивает жертву к полезной нагрузке CSRF, CSRF загружает запрос формы с правильными токенами csrf, потому что он выполняется в браузере жертвы, в том же самом источнике сайта жертвы и использует сеанс аутентификации жертвы. Злоумышленнику не нужно знать токены csrf, просто имейте возможность манипулировать полями формы, в которых они хранятся. 4) Злоумышленник получает выгоду от того, что жертва отправляет форму - никаких всплывающих окон или социальной инженерии не требуется, кроме как заманить жертву в полезную нагрузку CSRF, но форма должна сделать что-то «полезное» для злоумышленника.

1 голос
/ 16 июня 2010

Да, это все еще вектор атаки.

Что вам нужно учитывать, это:

Может ли аутентифицированный пользователь обманным путем просмотреть эту страницу со злонамеренно созданными данными?

Ответ в этом случае - да (при условии, что у вас есть аутентифицированные пользователи). Потому что можно направить кого-то на ваш сайт и передать в это поле вредоносные переменные.

0 голосов
/ 17 июня 2010

Это абсолютно допустимая форма XSS.XSS поставляется в двух формах - хранится и отражается.Отражение встречается гораздо чаще, но хранится потенциально более опасно.Отраженный XSS обычно используется как часть атаки социальной инженерии.Злоумышленник создает URL-адрес, подобный следующему: http://host.com/page.php?my_field=malicious_code Они часто сокращают URL-адрес с помощью tinyutl или bit.ly и выводят его обычными методами социальной инженерии (электронная почта, доска объявлений, твиттер, похищенные учетные записи Facebook,и др.)

0 голосов
/ 16 июня 2010

Я думаю, что вы имеете в виду, поскольку пользователь 2 не может отображать предыдущие данные, добавленные пользователем 1, поэтому может ли произойти XSS? Поэтому, если пользователь 1 взломает URL-адрес, чтобы на веб-странице также отображались некоторые параметры $ _GET (а затем даже изменили его на tinyurl), и распространите этот URL-адрес, говоря, что действительно стоит посмотреть эту страницу и т. Д., Затем это может быть возможно.

Так что все же лучше избегать всех параметров при отображении страницы.

...